﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using BarControls; ///--- para imprimir los Tickets


namespace GestionRecaudos
{
    class ImprimirTickets
    {
        //--- Datos que se mostraran en los Tickets
        string
             nombreEmpresa = string.Empty,
             direccionEmpresa = string.Empty,
             nitEmpresa = string.Empty,
             telefonoEmpresa = string.Empty,
             ciudadEmpresa = string.Empty,
             nombreImpresora = string.Empty;

        //---  Ticket
        Ticket ticket = null;

        private static ImprimirTickets imprimirTickets = null;
        
        private ImprimirTickets()
        {
            //--- Cargo los Parametros
            nombreEmpresa = Utils.get().getValorParametro("NombreEmpresa");
            direccionEmpresa = Utils.get().getValorParametro("DireccionEmpresa");
            nitEmpresa = Utils.get().getValorParametro("NitEmpresa");
            telefonoEmpresa = Utils.get().getValorParametro("TelefonoEmpresa");
            ciudadEmpresa = Utils.get().getValorParametro("CiudadEmpresa");
            nombreImpresora = Utils.get().getValorParametro("NombreImpresora");
        }

        public static ImprimirTickets get()
        {
            if (ImprimirTickets.imprimirTickets == null) { ImprimirTickets.imprimirTickets = new ImprimirTickets(); }
            return ImprimirTickets.imprimirTickets;
        }

        public bool impresoraExiste(string nombreImpresora)
        {
            //--- Verifico que la impresora exista
            this.ticket = new Ticket();
            if (!this.ticket.PrinterExists(this.nombreImpresora))
            {
                return false;
            }
            return true;
        }

        public bool imprimirRecaudos(DataTable datos, string TipoTicket)
        {
            try
            {
                DateTime fecha = DateTime.Now;
                if (!DateTime.TryParse(datos.Rows[0]["FechaGrab"].ToString(), out fecha))
                {
                    fecha = DateTime.Now;
                }
                Reportes.ticketRecaudo report = new GestionRecaudos.Reportes.ticketRecaudo();
                List<RptParameter> parametros = new List<RptParameter>();
                parametros.Add(new RptParameter("direccionEmpresa", this.direccionEmpresa));
                parametros.Add(new RptParameter("nitEmpresa", this.nitEmpresa));
                parametros.Add(new RptParameter("telefonoEmpresa", "Telefonos: " + this.telefonoEmpresa));
                parametros.Add(new RptParameter("ciudadEmpresa", this.ciudadEmpresa));
                parametros.Add(new RptParameter("Fecha", fecha.ToShortDateString() + " " + fecha.ToShortTimeString()));
                parametros.Add(new RptParameter("CodRecaudo", datos.Rows[0]["CodRecaudo"].ToString()));
                parametros.Add(new RptParameter("CodPlaca", datos.Rows[0]["CodPlaca"].ToString()));
                parametros.Add(new RptParameter("Cartulinas", datos.Rows[0]["Cartulinas"].ToString()));
                parametros.Add(new RptParameter("NumeroCartulinas", datos.Rows[0]["NumeroCartulinas"].ToString()));
                parametros.Add(new RptParameter("SubTotal", "$" + Utils.get().getFormatoMoneda(datos.Rows[0]["SubTotal"].ToString())));
                parametros.Add(new RptParameter("ValorAdicional", "$" + Utils.get().getFormatoMoneda(datos.Rows[0]["ValorAdicional"].ToString())));
                parametros.Add(new RptParameter("Total", "$" + Utils.get().getFormatoMoneda(datos.Rows[0]["Total"].ToString())));
                parametros.Add(new RptParameter("Observaciones", datos.Rows[0]["Observaciones"].ToString()));
                parametros.Add(new RptParameter("UserName", datos.Rows[0]["UserName"].ToString()));
                parametros.Add(new RptParameter("TipoTicket", TipoTicket));
                parametros.Add(new RptParameter("NombreEmpresa", this.nombreEmpresa));

                foreach (RptParameter param in parametros)
                {
                    report.SetParameterValue(param.Name, param.Value);
                }

                report.PrintOptions.PrinterName = this.nombreImpresora;
                report.PrintToPrinter(1, false, 1, 100);
                return true;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
            return false;
        }

        public bool imprimirDevoluciones(DataTable datos, string TipoTicket)
        {
            try
            {
                DateTime fecha = DateTime.Now;
                if (!DateTime.TryParse(datos.Rows[0]["FechaGrab"].ToString(), out fecha))
                {
                    fecha = DateTime.Now;
                }
                Reportes.ticketDevolucion report = new GestionRecaudos.Reportes.ticketDevolucion();
                List<RptParameter> parametros = new List<RptParameter>();
                parametros.Add(new RptParameter("direccionEmpresa", this.direccionEmpresa));
                parametros.Add(new RptParameter("nitEmpresa", this.nitEmpresa));
                parametros.Add(new RptParameter("telefonoEmpresa", "Telefonos: " + this.telefonoEmpresa));
                parametros.Add(new RptParameter("ciudadEmpresa", this.ciudadEmpresa));
                parametros.Add(new RptParameter("Fecha", fecha.ToShortDateString() + " " + fecha.ToShortTimeString()));
                parametros.Add(new RptParameter("CodRecaudo", datos.Rows[0]["CodRecaudo"].ToString()));
                parametros.Add(new RptParameter("CodPlaca", datos.Rows[0]["CodPlaca"].ToString()));
                parametros.Add(new RptParameter("Observaciones", datos.Rows[0]["Observaciones"].ToString()));
                parametros.Add(new RptParameter("UserName", datos.Rows[0]["UserName"].ToString()));
                parametros.Add(new RptParameter("TipoTicket", TipoTicket));
                parametros.Add(new RptParameter("NombreEmpresa", this.nombreEmpresa));
                parametros.Add(new RptParameter("CodCartulinaDevolucion", datos.Rows[0]["CodCartulinaDevolucion"].ToString()));
                parametros.Add(new RptParameter("CodCartulinaNueva", datos.Rows[0]["CodCartulinaNueva"].ToString()));
                parametros.Add(new RptParameter("Valor", "$" + Utils.get().getFormatoMoneda(datos.Rows[0]["Valor"].ToString())));
                parametros.Add(new RptParameter("CodCartulina", datos.Rows[0]["CodCartulina"].ToString()));

                foreach (RptParameter param in parametros)
                {
                    report.SetParameterValue(param.Name, param.Value);
                }
                report.PrintOptions.PrinterName = this.nombreImpresora;
                report.PrintToPrinter(1, false, 1, 100);
                return true;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
            return false;
        }



    }
}
